package cn.iocoder.an.module.business.controller.admin.feedback.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;

import java.time.LocalDate;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import cn.idev.excel.annotation.*;
import cn.iocoder.an.framework.excel.core.annotations.DictFormat;
import cn.iocoder.an.framework.excel.core.convert.DictConvert;

@Schema(description = "管理后台 - 快捷反馈 Response VO")
@Data
@ExcelIgnoreUnannotated
public class FeedbackRespVO {

    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19303")
    @ExcelProperty("id")
    private Long id;

    @Schema(description = "投诉日期", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("投诉日期")
    private LocalDate complaintDate;

    @Schema(description = "上板日期", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("上板日期")
    private LocalDate boardtDate;

    @Schema(description = "计划关闭日期", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("计划关闭日期")
    private LocalDate planCloseDate;

    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @ExcelProperty(value = "状态", converter = DictConvert.class)
    @DictFormat("feedback_status") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer status;

    @Schema(description = "问题来源", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty(value = "问题来源", converter = DictConvert.class)
    @DictFormat("problem_source") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer problemSource;

    @Schema(description = "问题等级", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty(value = "问题等级", converter = DictConvert.class)
    @DictFormat("problem_level") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private String problemLevel;

    @Schema(description = "分布", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty(value = "分布", converter = DictConvert.class)
    @DictFormat("distribution_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer distribution;

    @Schema(description = "历时")
    @ExcelProperty("历时")
    private Integer duration;

    @Schema(description = "客户")
    @ExcelProperty("客户")
    private String customer;

    @Schema(description = "部门", example = "25955")
    @ExcelProperty("部门")
    private Long deptId;

    @Schema(description = "提出人", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("提出人")
    private Long proposer;

    @Schema(description = "是否重发", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty(value = "是否重发", converter = DictConvert.class)
    @DictFormat("resend_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer resend;

    @Schema(description = "责任人", requiredMode = Schema.RequiredMode.REQUIRED, example = "17691")
    @ExcelProperty("责任人")
    private Long dutyUserId;

    @Schema(description = "解决小组成员", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("解决小组成员")
    private List<Long> solveUser;

    @Schema(description = "解决小组成员", example = "王五")
    @ExcelProperty("解决小组成员")
    private String solveUserName;

    @Schema(description = "D2:问题描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "随便")
    @ExcelProperty("D2:问题描述")
    private String problemDescription;

    @Schema(description = "领导指示")
    @ExcelProperty("领导指示")
    private String instruction;

    @Schema(description = "D2:到期日期")
    @ExcelProperty("D2:到期日期")
    private LocalDate expirationDateTwo;

    @Schema(description = "D3:ICA临时措施")
    @ExcelProperty("D3:ICA临时措施")
    private String interimMeasures;

    @Schema(description = "D4:原因分析")
    @ExcelProperty("D4:原因分析")
    private String reasonAnalysis;

    @Schema(description = "D3:到期日期")
    @ExcelProperty("D3:到期日期")
    private LocalDate expirationDateThree;

    @Schema(description = "D4:到期日期")
    @ExcelProperty("D4:到期日期")
    private LocalDate expirationDateFour;

    @Schema(description = "D5:PCA永久措施 ")
    @ExcelProperty("D5:PCA永久措施 ")
    private String longMeasures;

    @Schema(description = "D6:PCA验证结果 ")
    @ExcelProperty("D6:PCA验证结果 ")
    private String verify;

    @Schema(description = "D5:到期日期")
    @ExcelProperty("D5:到期日期")
    private LocalDate expirationDateFive;

    @Schema(description = "D6:到期日期")
    @ExcelProperty("D6:到期日期")
    private LocalDate expirationDateSix;

    @Schema(description = "程序文件、控制计划、FMEA、工艺文件是否更新")
    @ExcelProperty("程序文件、控制计划、FMEA、工艺文件是否更新")
    private List<String> files;

    @Schema(description = "D7:到期日期")
    @ExcelProperty("D7:到期日期")
    private LocalDate expirationDateSeven;

    @Schema(description = "下次汇报日期")
    @ExcelProperty("下次汇报日期")
    private LocalDate reportDate;

    @Schema(description = "问题关闭日期")
    @ExcelProperty("问题关闭日期")
    private LocalDate problemCloseDate;

    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("创建时间")
    private LocalDateTime createTime;

    @Schema(description = "售后或0公里")
    @ExcelProperty(value = "售后或0公里", converter = DictConvert.class)
    @DictFormat("after_or") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer afterOr;

}